package com.ainote.service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class AudioTranscodeService {

    /**
     * 将音频文件转码为百度ASR所需的格式
     *
     * @param inputFilePath  输入音频文件路径
     * @param outputFilePath 输出文件路径（通常为.wav或.pcm）
     * @return 转码是否成功
     */
    public boolean transcodeToStandardFormat(String inputFilePath, String outputFilePath) {
        // 构建FFmpeg命令。关键参数说明：
        // -i 输入文件 -y 覆盖输出文件 -acodec 指定音频编码器 -ar 设置采样率 -ac 设置声道数
        String[] command = {
                "ffmpeg", "-y",
                "-i", inputFilePath,
                "-acodec", "pcm_s16le", // 编码器：16位小端PCM，百度ASR兼容性好
                "-ar", "16000",         // 采样率：16kHz，符合百度ASR要求
                "-ac", "1",             // 声道：单声道
                outputFilePath
        };

        try {
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            Process process = processBuilder.start();

            // 读取FFmpeg的错误输出流（重要！很多信息和错误从这里输出）
            try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
                String line;
                while ((line = errorReader.readLine()) != null) {
                    // 在此可记录日志，便于调试
                    System.out.println("FFmpeg: " + line);
                }
            }

            int exitCode = process.waitFor();
            return exitCode == 0; // 返回码为0通常表示成功

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            return false;
        }
    }
}
